Последние изменения - Поиск:

edit SideBar

АдреснаяАрифметика

В A2 есть адресная арифметика, но для разыменования нужен модуль SYSTEM.

  • ADDRESS - это аналог «void *» в Си. В отличие от него, ANY может иметь ассоциированную информацию о типе и выделении памяти.
  • Преобразование указателя к ADDRESS: SYSTEM.VAL(ADDRESS,выражениеВозвращающееУказатель)
  • Получение адреса объекта, не являющегося указателем (записи, массива - не знаю, есть ли ещё что-то): ADDRESS OF имяПеременнойСодержащейЗапись или ADDRESSOF(имяПеременнойСодержащейЗапись)
  • Разыменование указателя и чтение значения: SYSTEM.GET(ВыражениеТипаADDRESS, имяПеременнойПриёмника) - в приёмник будет записано значение, на которое указывает указатель. При этом тип переменной приёмника может быть разным. Не знаю, будет ли это работать для типа приёмника ANY, поскольку ANY содержит данные по отрицательным смещениям. Проверить!

Попалось и вот такое: SYSTEM.GET(ВыражениеТипаАдрес, SYSTEM.VAL(CHAR, переменнаяТипаINTEGER))

  • Разыменование указателя и запись значения: SYSTEM.PUT(ВыражениеТипаADDRESS, имяПеременнойИсточника).
  • Приращение указателя: ВыражениеТипаАдрес + числовоеСмещениеВБайтах

И уж заодно, SYSTEM.VAL(тип, значение) - это опасное приведение типа.

Править - История - Печать - Последние изменения - Поиск
Редакция от 06.01.2020 15:19